home *** CD-ROM | disk | FTP | other *** search
- Path: news.larc.nasa.gov!amiga-request
- From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
- Subject: v91i104: Bootmenu 1.0 - yet another ntsc/pal switcher, Part01/01
- Reply-To: "John Davis, chem dept, Uni of Canty, NZ" <CHEM194@cantva.canterbury.ac.nz>
- Newsgroups: comp.sources.amiga
- Message-ID: <comp.sources.amiga:v91i104@ab20.larc.nasa.gov>
- Date: 18 May 91 01:45:17 GMT
- Approved: tadguy@uunet.UU.NET (Tad Guy)
- X-Mail-Submissions-To: amiga@uunet.uu.net
- X-Post-Discussions-To: comp.sys.amiga.misc
-
- Submitted-by: "John Davis, chem dept, Uni of Canty, NZ" <CHEM194@cantva.canterbury.ac.nz>
- Posting-number: Volume 91, Issue 104
- Archive-name: utilities/bootmenu-1.0/part01
-
- [ includes uuencoded executable and icon ...tad ]
-
- Bootmenu - YANPS (yet another ntsc/pal switcher). This program allows
- you to switch between NTSC and PAL if you have an obese agnus (8372).
- Where it differs from the rest (Matt Dillon's BPD and Nico Francois
- PALBoot) is that it allows for an interactive choice of options at
- boot time, via a graphical interface. Also, it gives you the option
- of turning off ALL your expansion boards, allowing you to disable
- your hard-disk (makes it harder for virii to attack it). Can also be
- useful in that respect to allow testing of software on a 'bare bones'
- machine (as it also turns off any expansion memory).
-
- Contains code that acts as an alternative to the 1mb chip ram patch
- CBM's setpatch installs, curing the problems with the setpatch code
- failing on a double-reboot.
-
- Includes assembler source (Hisoft DevPac) - tested on 1.3 and 1.2 ROMs,
- unknown if it works on 2.0 (though I somehow doubt it).
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 1)."
- # Contents: bootmenu.doc bootmenu.s bootmenu.uu bootmenu0.uu
- # Wrapped by tadguy@ab20 on Fri May 17 21:45:16 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'bootmenu.doc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'bootmenu.doc'\"
- else
- echo shar: Extracting \"'bootmenu.doc'\" \(10456 characters\)
- sed "s/^X//" >'bootmenu.doc' <<'END_OF_FILE'
- XBootMenu v1.0
- XBy J davis
- X09/1990
- X
- X
- XSynopsis
- X--------
- X
- XBootmenu - a program to allow graphical, interactive selection of NTSC/PAL
- Xscreen modes and the enabling/disabling of hard-disks on every reboot.
- XAlso acts as a partial replacement for CBM's setpatch program. Includes
- Xsource code in Assembler. Version 1.0 (first release). Author - John Davis
- X
- XPurpose
- X-------
- X
- XBootMenu serves three purposes :-
- X
- XFirstly it allows you to disable your auto-configing hard-disk (and all
- Xother auto-config devices) so as to minimise the chances of a virus or
- Xtrojan horse attacking your hard-disk when booting of a game disk, and
- Xalso to help with running some games/demos that won't run with a hard-disk
- Xactive.
- X
- XSecondly, for people with the 1mb Fat Agnus (8372), it offers a choice of
- XNTSC and PAL screen modes. PAL is useful for in the USA, as it offers a
- X25% increase in screen area (at the expense of being incompatible with
- XNTSC genlocks etc), whilst NTSC is useful for the rest of the world, as a
- Xlot of games are written for NTSC sized screens, and the graphics only
- Xdisplay the correct aspect ratio in NTSC mode ( F/A-18 has to be the best
- Xexample of this, playing f/a-18 on a PAL screen gives you a very
- X'squished' looking plane!)
- X
- XThirdly, it acts as an improved version of CBM's 'setpatch r' for people
- Xwith 1mb of chip memory. CBM's reboot handler will only survive ONE
- Xreboot, meaning that if you use rad, reboot off a floppy and then reboot
- Xagain, the contents of rad: are GONE!!! The reboot handler this installs
- Xis much more reliable - it will only fail if exec is so damaged the
- Xmachine _must_ coldboot.
- X
- XWhat's more, since it 'wedges' itself into the system you only need to
- Xload it once - it will survive reboots, which is handy if you're playing
- Xseveral games in a row and don't want to have to re-boot off the hard-disk
- Xto reselect screen mode, all you do is reboot and BootMenu will let you
- Xselect system options once again.
- X
- XInstallation
- X------------
- X
- XJust run BootMenu - either from the CLI or WorkBench (there's an icon
- Xprovided, though it's no artistic masterpiece - I'm a programmer, not an
- Xartist). You should get a message saying that it's installed ok.
- X
- XIMPORTANT - do NOT run the WorkBench1.3.2 Setpatch program with the 'r'
- Xoption (option to patch for rad: and 1mb ram) after you have run
- XBootMenu, as both use the same vector, and hence SetPatch will disable
- XBootMenu! You should run Setpatch _without_ the 'r' option!!
- X
- XAlso see the section 'virus checkers and BootMenu'
- X
- XUsage
- X-----
- X
- XOnce it's installed, the next time you reboot you should be presented with
- Xa menu screen asking whether or not to turn off all the machine's
- Xexpansion boards. Click the left button to select 'on' - this will leave
- Xyour hard-disk, expansion memory etc enabled, or click the right button to
- Xselect 'off' and turn off all the boards. If you don't make any selection
- Xwithin 10 seconds, the program will default to the 'no' option and leave
- Xall your boards turned on.
- X
- XIf you've got a 1mb Obese Agnus fitted, you'll then be presented with a
- Xsecond screen, allowing a choice of PAL screen modes (click left button)
- Xor NTSC (click right button). Again, if no choice is made within 10
- Xseconds the program will default to PAL.
- X
- XThe machine will then carry on it's normal boot sequence ....
- X
- XTechnical Info
- X--------------
- X
- XThis program uses BOTH a coldcapture and coolcapture handler to do it's
- Xwork.
- X
- XThe coldcapture handler is simply used to fix the KickStart1.x bug
- Xregarding 1mb of chip mem. The bug is that ks1.x treats any amount of
- Xchip memory greater than 512k as abnormal, and will do a total cold
- Xreboot, clearing any cold/cool handlers. Our cold-handler fixes this bug
- Xin the rom, mainly so as to make our cool-handler actually get a chance to
- Xrun, but as an added bonus it also acts as an improved version of setpatch
- Xwith the 'r' option.
- X
- XThe trouble with the CBM 'setpatch r' is that it doesn't stick around -
- Xthe coldcapture vector they (and I) use gets cleared after use, hence if
- Xyou want to survive multiple reboots you need to re-insert yourself into
- Xthe system. Setpatch fails to do this and hence can fail to protect rad:
- Xif you reboot twice in a row without reloading setpatch. We DO reinsert
- Xourselves, so unless the system is totally rebooted (as will happen if you
- Xget serious enough memory corruption from a guru, or from some games),
- XBootMenu should protect rad:.
- X
- X Moral of the story - use BootMenu instead of setpatch r!!!
- X
- X Note also that you should ONLY use BootMenu with KickStart 1.x!!!!
- X
- XThe main code for running the screens etc is hung off the coolcapture
- Xvector. Being on coolcapture as opposed to coldcapture allows us to
- Xaccess much more of the system, as most of the machine is setup by the
- Xtime coolcapture runs (this is important if we want to access exec.library
- Xfunctions such as addmem)
- X
- XThe menu driver runs all the hardware direct (intuition isn't in a usable
- Xstate when coolcapture runs), using the window controls so as to make each
- Xscreen only take up 1k for it's bitmap as opposed to the usual 21k. All
- Xscreens are only 1 plane deep (to conserve memory). The copper is used to
- Xrun the screen itself, and also to get more than 1 colour off the 1 plane
- Xscreen (reloading the palette on a per-scanline basis)
- X
- XThe 'core' of bootmenu (approx 2.5k of code, of which 2k is the bitmaps
- Xfor the display, the actual code fits in approx 512k bytes!) installs onto
- Xthe bottom of the system stack, to avoid having to use kickmemptr to keep
- Xour memory allocated. As the system stack is 6k, and only 1k is normally
- Xused this shouldn't be a problem (bootmenu uses the opposite end of the
- Xstack - there's still at least 2k free). If worse comes to worse and
- Xthe system stack grows large (due to nested exceptions), all that will
- Xhappen will be that BootMenu is overwritten - it will not cause the system
- Xto lock up in normal operation.
- X
- XAs we can't guarantee the system stack will be in chip mem, the screen
- Xdata and copper list is swapped into and out of chip memory (swapping
- Xpreserves the original memory contents - in case rad: was somehow using
- Xthe target memory ). I haven't tested the effect of using MoveSSP (a pd
- Xprogram which places the system stack in fast ram) but I would guess it's
- Xuse would prevent BootMenu from functioning (as expansion memory isn't
- Xaccessible during the reboot process).
- X
- XThe NTSC/PAL switch code simply alters the mode bit on the 1mb agnus.
- X
- XThe expansion board disable code is slightly more artistic - it scans for
- Xexapansion boards waiting to be configured , and either tells them to
- Xshuptup (if they support it) or configures them out of the way. Hence by
- Xthe time expansion.library gets run there's no boards around - hence
- Xnothing gets config'd and added to the system.
- X
- XPeople who bother to read the included source code will notice it possible
- Xto build a version that will do an AddMem of non-autoconfig memory on
- Xreboot. This was done so as to allow a friend (hi peter!) with an old
- XRonin accelerator board to do a 'fake autoconfig' on his memory as opposed
- Xto being forced to run a cli 'addmem' on every reboot. As most memory
- Xboards are autoconfig nowdays, I haven't released the executable for that
- Xversion - but the source code be useful for anyone wanting to build a
- Xsimple memory board. Note that in the addmem code I set the priority of
- Xthe ram to -20 to make sure the 2090a driver uses the chipmem for it's
- Xbuffers, as the ronin memory is NOT capable of being DMA'd to. If your
- Xmemory does support DMA, you should raise it's priority to >0 to make the
- Xdriver and libraries use it, as this will maximise the amount of free chip
- Xmem you will have after reboot.
- X
- XThe program was assembled using Hisoft's DevPac v2 - it should be fairly
- Xsimle to alter the code to assemble under other assemblers however.
- X
- X
- XVirus Checkers and BootMenu
- X---------------------------
- X
- XAs BootMenu hangs around by much the same mechanism as some viruses, most
- Xgood virus checkers will give you some warning when run about ColdCapture
- Xand CoolCapture being set and the possibility that this represents a virus
- Xin the system.
- X
- XIf you use VMK, you will actually be able to see an embedded message
- Xconfirming that the program on cold|coolcapture is only BootMenu, with
- Xother packages your actions may need to be different.
- X
- XIf you're at all unsure that what's on the vectors may NOT be bootmenu,
- Xyou should re-run BootMenu, as this will over-write the vectors and
- Xre-install itself, disabling any virus that may have been using them.
- XSimply clearing the vectors (thru your virus checker) will disable
- Xbootmenu.
- X
- XAs long as you get BootMenu's screens on reboot, you can be 90% sure no
- Xvirus is using the coldcapture and coolcapture vectors - however you
- Xshould still be cautious, as a virus could pass execution to my code if it
- Xwanted to be clever (haven't yet seen a virus that clever though!).
- X
- XAlso, as some newer viruses stay in memory _without_ using the
- Xcold/coolcapture vectors, so you should stil run virus checkers!
- X
- XGeneral Info
- X------------
- X
- XI would like to thank all the people on AmigaINFO BBS who helped in beta
- Xtesting this program, especially Peter.B Mcintyre, John Nettleton and
- XStephen Webber, all of whom were always only too willing to download new
- Xtest versions at weird hours to help out with testing the code on
- Xdiffering machine setups.
- X
- XIf you have any questions about the program, or bug-reports, feel free to
- Xcontact me.
- X
- XThe source code and executable are 100% public domain - use or abuse it as
- Xyou see fit. If you'd like to use BootMenu on a commercial package, feel
- Xfree, though an acknowledgement (or a free copy of the package!) would be
- Xnice!
- X
- XYou can contact me via the following routes :-
- X
- Xmail on internet/usenet/bitnet/janet et al :
- X
- X chem194@canterbury.ac.nz
- X "meaningful userid's are for wimps" :-)
- X
- XBBS email:
- X
- X 'JOHN DAVIS' on AmigaINFO BBS
- X ph NZ+3-3371531
- X 24 hours a day 1200/2400 baud ccitt (v22/v22bis)
- X
- X
- XSnail Mail if you must to:
- X
- X John Davis
- X 31 Clarence St
- X ChristChurch 2
- X New Zealand
- X
- X
- X
- XENJOY!!!
- X
- END_OF_FILE
- if test 10456 -ne `wc -c <'bootmenu.doc'`; then
- echo shar: \"'bootmenu.doc'\" unpacked with wrong size!
- fi
- # end of 'bootmenu.doc'
- fi
- if test -f 'bootmenu.s' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'bootmenu.s'\"
- else
- echo shar: Extracting \"'bootmenu.s'\" \(21253 characters\)
- sed "s/^X//" >'bootmenu.s' <<'END_OF_FILE'
- X; BootMenu by J Davis 09/1990
- X;
- X; version 1.0 - beta 05
- X;
- X; assembled using HiSoft DevPac v2
- X;
- X; a little program to allow choice of NTSC/PAL screen mode
- X; and expansion boards enabled/disabled at boot-time
- X;
- X; hangs around via both cool and coldcapture (see note 1)
- X;
- X; on each reboot puts up a menu allowing mode choice
- X;
- X; if there's no input in 10 secs, it defaults to the left most
- X; option ( PAL and boards ON respectively )
- X;
- X;
- X; note 1 : on machines with 1mb of chip, due to a slight oversight
- X; in the 1.3/1.2 kickstart reset routine, EVERY reboot causes
- X; a TOTAL system rebuild. This of course makes it hard to make
- X; our code hang around.
- X;
- X; Hence, we add a coldcapture handler that fixes the bug,
- X; then run our menu routine of coolcapture
- X;
- X; Hence our coldcapt routine also acts as an IMPROVED setpatch R,
- X; in that two reboots in a row KILLS setpatch r, wheras ours,
- X; hangs around and hence protects RAD: properly. Therefore
- X; DO NOT use SetPatch r and BootMenu at the same time!
- X;
- X;
- X; note 2 : if do_addemem is set to 1, this will build a version
- X; that does an addmem of memory on the ronin 020 board
- X; on the fly, due to the ronin mem not being dma-able we
- X; have to set a low pri on the mem
- X;
- X
- X ; turn on debug info and turn off optimising
- X OPT D+
- X OPT O-
- X
- X;======================
- X
- Xdo_addmem equ 0 ; flag for whether we do an addmem
- X ; for hurricane board as well
- X
- X;======================
- X
- X
- X IFNE do_addmem=1
- X FORMAT 0-,1-,2-
- X LIST
- X ; building PBMC_BootMenu
- X NOLIST
- X output PBMC_BootMenu
- X ELSEIF
- X FORMAT 0-,1-,2-
- X LIST
- X ; building normal BootMenu
- X NOLIST
- X output bootmenu
- X ENDC
- X
- Xchip_addr equ $40000 ; where we swap our chip data to/from
- X
- X; process structure offsets
- X
- Xpr_cli equ $0Ac ; process cli flag offset
- Xpr_msgport equ $05c ; process msgport offset
- X
- X; execbase structure offsets
- X
- Xcoldcapture equ $02a
- Xcoolcapture equ $02e
- Xsysstklower equ $03a
- X
- X; misc library functions
- X
- Xforbid equ -$084 ; offsets for various exec and int calls
- Xgetmsg equ -$174 ; saves long includes and compile times
- Xreplymsg equ -$17a
- Xwaitport equ -$180
- Xfindtask equ -$126
- Xautoreq equ -$15c
- Xopenlib equ -$228
- Xcloselib equ -$19e
- X
- Xoutput equ -$003c
- Xwrite equ -$0030
- X
- Xopenlibrary equ -$0228
- Xcloselibrary equ -$019e
- X
- Xaddmemlist equ -618
- X
- X; hardware equates
- X
- Xpotgor equ $dff016
- Xpotgo equ $dff034
- X
- Xintreq equ $dff09c
- Xintreqr equ $dff01e
- X
- Xddfstart equ $dff092
- Xddfstop equ $dff094
- X
- Xdiwstart equ $dff08e
- Xdiwstop equ $dff090
- X
- Xbpl1mod equ $dff108
- X
- Xbplcon1 equ $dff102
- Xbplcon0 equ $dff100
- X
- Xr_color0 equ $0180
- Xr_color1 equ $0182
- X
- Xr_bpl1pth equ $00e0
- Xr_bpl1ptl equ $00e2
- X
- Xcop1lch equ $dff080
- Xcop1lcl equ $dff082
- Xcopjmp1 equ $dff088
- X
- Xdmacon equ $dff096
- X
- Xagnusdetect equ $dff004
- X
- X;==============================================================
- X
- Xstartup: ; startup code - determine if run from wb/cli etc
- X
- X move.l $4,a6
- X move.l #0,a1
- X jsr findtask(a6) ; find ourselves
- X
- X move.l d0,a4 ; save our process pointer
- X
- X move.l pr_cli(a4),d0
- X bne fromdos ; was a DOS startup
- X
- X ; was started from WB
- X
- Xfromwb: lea pr_msgport(a4),a0
- X jsr waitport(a6) ; wait for startup msg
- X lea pr_msgport(a4),a0
- X jsr getmsg(a6) ; get the wb msg
- X
- X move.l d0,wbmsg ; save pointer to our startup msg
- X move.l #1,wb ; flag we started from wb
- X
- X lea intuiname,a1
- X move.l #0,d0
- X move.l $4,a6
- X jsr openlib(a6) ; open intuition lib
- X
- X move.l d0,a6 ; save ibase
- X
- X move.l #0,a0 ; window to display in
- X move.l #bodyitext1,a1 ; body text
- X move.l #gaditext,a2 ; postive text
- X move.l #gaditext,a3 ; negative text
- X move.l #0,d0 ; pflags
- X move.l #0,d1 ; nflags
- X move.l #370,d2 ; width
- X move.l #80,d3 ; height
- X jsr autoreq(a6) ; request user confirmation
- X
- X move.l a6,a1 ; close intuition lib
- X move.l $4,a6
- X jsr closelib(A6)
- X
- X bsr install ; install ourselves
- X
- X bra exit
- X
- Xfromdos: ; was run from dos - output message to stdout
- X
- X move.l $4,a6
- X lea dosname,a1
- X move.l #$0,d0
- X jsr openlibrary(a6) ; open dos library
- X
- X move.l d0,a6 ; save dos base
- X
- X jsr output(a6) ; get handle on stdout
- X
- X move.l d0,d1 ; get file handle
- X move.l #msgtxt,d2
- X move.l #etext-msgtxt,d3
- X jsr write(a6) ; put up a message saying we're installed
- X
- X move.l $4,a6
- X move.l a6,a1
- X jsr closelibrary(a6) ; close dos
- X
- X bsr install
- X
- Xexit: move.l wb,d0
- X cmp.l #0,d0 ; was this a CLI invocation
- X beq exit_dos ; DOS - just exit
- X
- X ; workbench exit
- X
- X move.l $4,a6
- X jsr forbid(a6) ; lock out everyone else
- X
- X move.l wbmsg,a1
- X jsr replymsg(a6) ; reply to Wbstartup msg
- X
- Xexit_dos: move.l #0,d0 ; return with return code 0
- X rts
- X
- X;=================================================
- X even
- Xwb: dc.l 0 ; run mode flag 0=dos process 1=wbprocess
- Xwbmsg: dc.l 0 ; where we save our workbench msg
- X
- X even
- Xintuiname: dc.b "intuition.library",0
- X
- X even
- Xdosname: dc.b "dos.library",0
- X
- X ; message we output for cli startup
- X IFNE do_addmem=1
- Xmsgtxt: dc.b 27,"[33mBootMenu PBMC",27,"[0m, by J Davis 09/1990",10
- X ELSEIF
- Xmsgtxt: dc.b 27,"[33mBootMenu v1.0",27,"[0m, by J Davis 09/1990",10
- X ENDC
- X dc.b "installed ok - menu will become active at next reboot",10,0
- Xetext: dc.b 0
- X
- X even
- X
- X ; stuff for our autorequester for wb usage
- Xbodyitext1: dc.b 2 ; front pen
- X dc.b 1 ; back pen
- X dc.b 0 ; draw mode
- X dc.w 40 ; leftedge
- X dc.w 6 ; topedge
- X dc.l 0 ; textattr = default
- X dc.l bodytext1 ; actual text
- X dc.l bodyitext2 ; next
- X
- Xbodyitext2: dc.b 3 ; front pen
- X dc.b 0 ; back pen
- X dc.b 0 ; draw mode
- X dc.w 120 ; leftedge
- X dc.w 26 ; topedge
- X dc.l 0 ; textattr = default
- X dc.l bodytext2 ; actual text
- X dc.l bodyitext3 ; next
- X
- Xbodyitext3: dc.b 3 ; front pen
- X dc.b 0 ; back pen
- X dc.b 0 ; draw mode
- X dc.w 20 ; leftedge
- X dc.w 36 ; topedge
- X dc.l 0 ; textattr = default
- X dc.l bodytext3 ; actual text
- X dc.l 0 ; next
- X
- Xgaditext: dc.b 0 ; front pen
- X dc.b 0 ; back pen
- X dc.b 0 ; draw mode
- X dc.w 4 ; leftedge
- X dc.w 4 ; topedge
- X dc.l 0 ; textattr = default
- X dc.l gadtext ; actual text
- X dc.l 0 ; next
- X
- X ; actual text for our requester
- X
- X IFNE do_addmem=1
- Xbodytext1: dc.b "BootMenu PBMC, by J Davis 09/1990",0
- X ELSEIF
- Xbodytext1: dc.b "BootMenu v1.0, by J Davis 09/1990",0
- X ENDC
- Xbodytext2: dc.b "installed ok",0
- Xbodytext3: dc.b "menu will become active at next reboot",0
- Xgadtext: dc.b "Ok",0
- X
- X;=====================================================
- X
- X even
- X
- Xinstall: ; this routine does the actual cold/coolcapture
- X ; setting
- X
- X ; works out where we're going to install to
- X ; then copies handler code there and hooks vectors
- X
- X move.l $4,a6
- X move.l sysstklower(A6),a0 ; get pointer to base of sys-stack
- X move.l a0,codetarget ; save pointer to address
- X
- X move.l a0,a1
- X add.l #coldcapt-captstart,a1 ; point to coldcapt address
- X move.l a1,coldcaptaddr ; save address
- X
- X move.l a0,a1
- X add #coolcapt-captstart,a1 ; point to coolcapt addres
- X move.l a1,coolcaptaddr ; save address
- X
- X ; now stuff our code away on the bottom of the system stack
- X
- X lea captstart(pc),a1 ; code to copy
- X move.l codetarget,a2 ; where to copy to
- X move.l #endcapt-captstart,d0 ; amount to copy
- Xmloop: move.b (a1)+,(a2)+
- X dbf d0,mloop
- X
- X ; now install a vector to the copied code in execbase.coldcapture
- X
- X move.l $4,a6 ; get execbase
- X move.l coldcaptaddr,a0 ; address of our coldcap routine
- X move.l a0,coldcapture(a6) ; set coldcapture
- X
- X move.l coolcaptaddr,a0 ; address of our coolcap routine
- X move.l a0,coolcapture(a6) ; set coolcapture to our code
- X
- X ; finally, recalc the execbase checksum
- X
- X lea 34(a6),a0 ; start of checksummed area in execbase
- X move.w #$16,d0 ; number of checksummed words
- X move.w #$0,d1 ; clear counter
- X
- Xsum: add.w (A0)+,d1 ; sum execbase and update checksum
- X dbf d0,sum
- X
- X not.w d1
- X move.w d1,82(a6) ; set new execbase checksum
- X
- X ; all done
- X rts
- X
- X even
- X
- Xcodetarget: dc.l 0
- Xcoolcaptaddr: dc.l 0
- Xcoldcaptaddr: dc.l 0
- X
- X;==============================================================
- X;
- X; our capture routines
- X;
- X; since this is going to stick around, we need to copy
- X; it somewhere safe - like the SysStack area
- X;
- X; since we can't guarantee sys-stack will be in chip, we
- X; swap our bitplane data and copper list to chip mem on the fly
- X; and then swap it back out ( in case rad: was using the bit where
- X; we put our screen ! )
- X
- X even
- X
- Xcaptstart:
- X
- Xcoldcapt: ; this is our coldcapture routine - basically
- X ; fixes the rebuild problem that SETPATCH R tries
- X ; ( but fails ) to
- X
- X ; CAUTION!! This code is _specific to kickstart 1.x
- X ; DO NOT USE WITH KickStart 2.x!!!
- X
- X ; important - reinsert our code into execbase, as coldcapt
- X ; is cleared before it's called!! this is what setpatch r
- X ; fails to do (and hence why it's not reliable)!
- X
- X lea coldcapt(pc),a0 ; on entry A6=execbase
- X move.l a0,coldcapture(a6) ; reset our vector in execbase - don't need to resum
- X
- X ; the following is a kludge to get around exec 34.x
- X ; insisting on doing a system rebuild if >512k chip
- X ; it is directly based on the rom code in ks1.2/1.3
- X
- X bchg #1,$bfe001 ; toggle led on
- X
- X move.l $fc0010,d0 ; get ks ver no.
- X cmp.l $14(a6),d0 ; compare with execbase ver
- X bne.s rebuild_all
- X
- X ; the following is the bit that's wrong with ks1.x
- X ; now fixed to work with 1mb chipmem
- X
- X move.l $3e(a6),a3 ; get maxchipmem
- X cmpa.l #$100000,a3 ; more than 1mb chip ?
- X bhi.s rebuild_all
- X
- X add.l #$1e,a5 ; point A5 past the (incorrect) code we skip
- X jmp (A5) ; carry on with rest of boot
- X
- Xrebuild_all: jmp $fc01ce ; jump to rom rebuild code
- X
- X;====================================================================
- X
- X even
- X
- Xcoolcapt: ; our coolcapture routine - actually does the menus etc
- X
- X movem.l d0-d7/a0-a6,-(a7) ; save everything
- X
- X bsr swapmem ; first, copy our bitplane data and copper list to chip mem
- X
- X move.w #$ffff,potgo ; set for button inputs on mouse
- X
- X ; finished setting up - ask whether to turn boards off
- X
- X move.l #chip_addr+board_mode-chipdata_start,a1 ; address where bitplane data is copied to
- X bsr doscreen ; put up screen and wait for choice
- X
- X btst #0,d0
- X beq.s next ; left mouse=leave on so skip
- X
- X ; user requested expansion board disable - do it
- X
- X moveq.l #$7,d1 ; max no boards we fix = 8
- X
- Xbchk: move.w $e80008,d0 ; get flag byte from board
- X not.w d0 ; invert
- X btst.l #14,d0 ; see if board supports shut_up
- X beq.s shut_up ; bit=0 means board shuts up ok
- X
- X ; board doesn't support shut up, so
- X ; config board to $200000 (only gap big enough for 8mb boards)
- X
- X move.w #$0000,$e8004a ; fake board out to $200000
- X move.w #$2000,$e80048
- X
- X bra.s nboard ; carry on
- X
- Xshut_up: move.b #$ff,$e8004c ; tell the board to shut up
- X
- Xnboard: dbf d1,bchk ; loop thru all boards
- X
- X ; now query for screen mode
- Xnext: ; see if this machine has the 1mb Agnus
- X
- X move.w agnusdetect,d0
- X and.w #$2000,d0
- X beq.s no_8372 ; doesn't have obese agnus - skip screen mode choice
- X
- X ; has the 1mb agnus, offer screen mode choice
- X
- X move.l #chip_addr+scr_mode-chipdata_start,a1 ; address where bitplane data is copied to
- X bsr doscreen ; put up screen and wait for choice
- X
- X btst #0,d0 ; left mouse = PAL
- X beq.s go_pal
- X
- X move.w #$0000,$dff1dc ; set NTSC mode on agnus
- X bra.s no_8372
- X
- Xgo_pal: move.w #$0020,$dff1dc ; set PAL mode on agnus
- X
- Xno_8372: bsr swapmem ; finally restore chipmem
- X
- X IFNE do_addmem=1
- X
- X FORMAT 0-,1-,2-
- X LIST
- X ; adding special addmem code!
- X NOLIST
- X
- X ; Addmem the 32 bit mem on the Ronin 020 board
- X ; into the system
- X ;
- X ; we add 1mb, starting at $600000
- X
- X move.l $4,a6 ; get execbase
- X move.l #$100000,d0 ; amount of mem we're adding ( 1mb )
- X move.l #$5,d1 ; attributes ( memf_fast | memf_public )
- X move.l #-20,d2 ; pri of mem must be low so as to force HD to use chip!!!
- X move.l #$600000,a0 ; where the mem starts ( 6 mb )
- X move.l #0,a1 ; pointer to a name for this block
- X ; don't want one so pass NULL
- X jsr addmemlist(a6) ; do the deed !!!
- X
- X ; you need to be careful after this to NOT run the
- X ; ronin addmem prog - as otherwise you will get the
- X ; same block of mem added TWICE ( can you say 'guru' ? :-)
- X ENDC
- X
- X movem.l (A7)+,d0-d7/a0-a6 ; get back all regs
- X rts
- X
- X
- X; ===============================
- X; this routine swaps chipdata into/out of a block of chipmem
- X
- Xswapmem: lea chipdata_start(pc),a0 ; where to copy from
- X move.l #chip_addr,a1 ; where we copy to
- X move.l #chipdata_end-chipdata_start,d0 ; amount to copy
- X
- Xcm_loop: move.b (a0),d1 ; we exchange data in and out
- X move.b (a1),d2
- X move.b d2,(a0)+
- X move.b d1,(a1)+
- X dbf d0,cm_loop
- X
- X rts
- X
- X
- X;====================================
- X; this subroutine puts up the screen pointed to by a1
- X; and return d0=0 for left mouse and d0<>0 for right mouse
- X; also trashes d1
- X
- Xdoscreen: ; setup screen hardware
- X
- X move.w #$1200,bplcon0 ; set for lores, 1 plane
- X move.w #$0000,bplcon1
- X
- X move.w #$0000,bpl1mod ; modulo = 0
- X
- X move.w #$0038,ddfstart ; data fetch start
- X move.w #$00d0,ddfstop ; data fetch stop
- X
- X move.w #$7081,diwstart ; display window start
- X move.w #$89b0,diwstop ; display window stop
- X
- X move.l a1,d0 ; setup up copper list bitplane pointers
- X move.w d0,chip_addr+screen_l-chipdata_start ; point cop1l load addr to right place
- X swap d0
- X move.w d0,chip_addr+screen_h-chipdata_start ; point cop1h load addr to right place
- X
- X move.l #chip_addr+ourcoplist-chipdata_start,cop1lch ; point copper at our copper list
- X
- X move.w copjmp1,d0 ; force copper to our list
- X
- X move.w #%1000000110000000,dmacon ; enable bitplane and copper dma
- X
- X move.w #10*50,d1 ; 10 secs worth of vblanks before timeout
- X
- Xwaittof: move.w intreqr,d0
- X btst #5,d0 ; vblank int ?
- X beq.s waittof ; wait until tof true
- X
- X move.w #$0020,intreq ; clear int
- X
- X btst #6,$bfe001 ; left button down ?
- X beq.s lmb
- X
- X btst #10,potgor ; right button down
- X beq.s rmb
- X
- X subq.w #$1,d1 ; dec frame counter
- X cmp.w #$0,d1 ; time up ?
- X beq.s lmb ; default to left mouse button
- X
- X bra.s waittof
- X
- Xlmb: moveq #0,d0
- X bra.s _exit_1
- X
- Xrmb: moveq #1,d0
- X
- X_exit_1: ; debounce buttons to avoid 'fallthru' - wait for both buttons up
- X
- X btst #10,potgor
- X beq _exit_1 ; wait for user to let go of rmb
- X
- X btst #6,$bfe001
- X beq _exit_1 ; wait for user to let go of rmb
- X
- X ; now delay 15 vblanks to allow buttons to settle
- X
- X move.w #15,d2
- X
- X_1waittof: move.w intreqr,d1
- X btst #5,d1 ; vblank int ?
- X beq.s _1waittof ; wait until tof true
- X
- X move.w #$0020,intreq ; clear int
- X
- X subq.w #1,d2 ; dec delay counter
- X cmp.w #$0,d2
- X bne _1waittof
- X
- X move.w #%0000000110000000,dmacon ; disable bitplane and copper dma
- X
- X rts
- X
- X;=========================================
- X
- X ; message for people running VMK etc
- X
- X dc.b " BootMenu v1.0 J Davis - this is NOT a virus!!! "
- X
- X;=========================================
- X
- X even
- X
- Xchipdata_start:
- X
- Xourcoplist: ; the following copperlist runs our screen
- X
- X dc.w r_bpl1pth
- Xscreen_h dc.w 0 ; set high bitplane address
- X
- X dc.w r_bpl1ptl
- Xscreen_l dc.w 0 ; set low bitplane address
- X
- X dc.w r_color0
- X dc.w $0026 ; set background
- X
- X dc.w $6f01,$ff00 ; wait for top of our display
- X
- X dc.w r_color1
- X dc.w $0fff ; set fg
- X
- X dc.w $7101,$ff00 ; wait til after top line
- X
- X dc.w r_color1
- X dc.w $0f08 ; set fg
- X
- X dc.w $7c01,$ff00 ; wait for next bit of text
- X
- X dc.w r_color1
- X dc.w $006c ; set fg
- X
- X dc.w $8801,$ff00 ; wait for bottom line
- X
- X dc.w r_color1
- X dc.w $0fff ; set fg
- X
- X dc.w $ffff,$fffe ; wait for next TOF
- X
- X ; the following is the bit map for out first screen
- X
- Xboard_mode: dc.l $ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $0000038C,$60000000,$0000000F,$E0000000,$00018000,$000FC000,$0000E000,$00000000,$00000000,$00000000
- X dc.l $000006CE,$60000000,$00000006,$60000000,$00000000,$00066000,$00006000,$00000000,$71FDFC00,$00000000
- X dc.l $0007EC6F,$67E00000,$00000006,$063DC3C7,$C3E383C7,$C00663C3,$CEC363E0,$00000000,$D8CCCC00,$00000000
- X dc.l $07E00C6D,$E007E000,$00000007,$83666066,$66018666,$6007C660,$6766E600,$000000FD,$8CC0C0FC,$00000000
- X dc.l $00000C6C,$E0000000,$00000006,$01C661E6,$63C18666,$60066661,$E66663C0,$0000FC01,$8CF0F000,$FC000000
- X dc.l $0007E6CC,$67E00000,$00000006,$6367C666,$60618666,$60066666,$66066060,$00000001,$8CC0C000,$00000000
- X dc.l $0000038C,$60000000,$0000000F,$E63603B6,$67C3C3C6,$600FC3C3,$BF03B7C0,$000000FC,$D8C0C0FC,$00000000
- X dc.l $00000000,$00000000,$00000000,$000F0000,$00000000,$00000000,$00000000,$00000000,$71E1E000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $000007E0,$00004000,$00000006,$18C001E0,$07E00000,$7007C000,$00C00001,$E1E018C1,$E1E1E000,$00000000
- X dc.l $00000330,$0000C000,$00000006,$19C00330,$03300000,$30036000,$00000003,$333031C3,$33333000,$00000000
- X dc.l $00000331,$E1E1F331,$E3E33003,$30C00370,$03333000,$300331E3,$31C1F003,$733060C3,$33337000,$00000000
- X dc.l $000003E3,$3330C3BB,$33333003,$30C003F0,$03E33000,$30033033,$30C30003,$F1F0C0C1,$F1F3F000,$00000000
- X dc.l $00000333,$3330C35B,$F3333001,$E0C003B0,$03333003,$300330F3,$30C1E003,$B03180C0,$3033B000,$00000000
- X dc.l $00000333,$3330D31B,$03333001,$E0C0C330,$0331E003,$30036331,$E0C03003,$306300C0,$60633000,$00000000
- X dc.l $000007E1,$E1E06319,$E331D800,$C3F0C1E0,$07E0C001,$E007C1D8,$C1E3E001,$E1C603F1,$C1C1E000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00038000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
- X
- X ; the following is the bitmap for our second screen
- X
- Xscr_mode: dc.l $ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $000007E0,$C7800000,$00000000,$00001E00,$00000000,$00410007,$00000000,$0000018C,$FC787800,$00000000
- X dc.l $00000331,$E3000000,$00000000,$00003300,$00000000,$00630003,$00000000,$000001CC,$B4CCCC00,$00000000
- X dc.l $0003F331,$E303F000,$00000000,$0000381E,$761E1E3E,$00771E1B,$1E000000,$0000FDEC,$30E180FC,$00000000
- X dc.l $03F003E3,$330003F0,$00000000,$00001C33,$3B333333,$007F3337,$33000000,$00FC01BC,$30718000,$FC000000
- X dc.l $00000303,$F3100000,$00000000,$00000730,$333F3F33,$006B3333,$3F000000,$0000019C,$301D8000,$00000000
- X dc.l $0003F306,$1B33F000,$00000000,$00003333,$30303033,$00633333,$30000000,$0000FD8C,$30CCCCFC,$00000000
- X dc.l $00000786,$1FF00000,$00000000,$00001E1E,$781E1E33,$00631E1D,$9E000000,$0000018C,$78787800,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $000007E0,$00004000,$00000006,$18C001E0,$07E00000,$7007C000,$00C00001,$E1E018C1,$E1E1E000,$00000000
- X dc.l $00000330,$0000C000,$00000006,$19C00330,$03300000,$30036000,$00000003,$333031C3,$33333000,$00000000
- X dc.l $00000331,$E1E1F331,$E3E33003,$30C00370,$03333000,$300331E3,$31C1F003,$733060C3,$33337000,$00000000
- X dc.l $000003E3,$3330C3BB,$33333003,$30C003F0,$03E33000,$30033033,$30C30003,$F1F0C0C1,$F1F3F000,$00000000
- X dc.l $00000333,$3330C35B,$F3333001,$E0C003B0,$03333003,$300330F3,$30C1E003,$B03180C0,$3033B000,$00000000
- X dc.l $00000333,$3330D31B,$03333001,$E0C0C330,$0331E003,$30036331,$E0C03003,$306300C0,$60633000,$00000000
- X dc.l $000007E1,$E1E06319,$E331D800,$C3F0C1E0,$07E0C001,$E007C1D8,$C1E3E001,$E1C603F1,$C1C1E000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00038000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
- X dc.l $ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
- X
- Xchipdata_end:
- X
- Xendcapt:
- X
- X END
- X
- END_OF_FILE
- if test 21253 -ne `wc -c <'bootmenu.s'`; then
- echo shar: \"'bootmenu.s'\" unpacked with wrong size!
- fi
- # end of 'bootmenu.s'
- fi
- if test -f 'bootmenu.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'bootmenu.uu'\"
- else
- echo shar: Extracting \"'bootmenu.uu'\" \(5981 characters\)
- sed "s/^X//" >'bootmenu.uu' <<'END_OF_FILE'
- Xbegin 666 bootmenu
- XM```#\P`````````!``````````````,I```#Z0```RDL>0````0B?`````!.0
- XMKO[:*$`@+`"L9@``@D'L`%Q.KOZ`0>P`7$ZN_HPCP````0@C_`````$```$$Q
- XM0_D```$,(#P`````+'D````$3J[]V"Q`('P`````(GP```&.)'P```'*)GP`A
- XM``'*(#P`````(CP`````)#P```%R)CP```!03J[^I").+'D````$3J[^8F$`^
- XM`:1@``!`+'D````$0_D```$>(#P`````3J[]V"Q`3J[_Q"(`)#P```$J)CP`P
- XM``!B3J[_T"QY````!").3J[^8F$``6(@.0```02PO`````!G```6+'D````$6
- XM3J[_?")Y```!"$ZN_H8@/`````!.=0``````````:6YT=6ET:6]N+FQI8G)A5
- XM<GD`9&]S+FQI8G)A<GD`&ULS,VU";V]T365N=2!V,2XP&ULP;2P@8GD@2B!$S
- XM879I<R`P.2\Q.3DP"FEN<W1A;&QE9"!O:R`M(&UE;G4@=VEL;"!B96-O;64@G
- XM86-T:79E(&%T(&YE>'0@<F5B;V]T"@````(!````*``&`````````=X```&BX
- XM`P````!X`!H````````"`````;8#`````!0`)`````````(-````````````8
- XM!``$`````````C0`````0F]O=$UE;G4@=C$N,"P@8GD@2B!$879I<R`P.2\Q=
- XM.3DP`&EN<W1A;&QE9"!O:P!M96YU('=I;&P@8F5C;VUE(&%C=&EV92!A="!N3
- XM97AT(')E8F]O=`!/:P``+'D````$(&X`.B/(```"K")(T_P`````(\D```*T;
- XM(DC2_``V(\D```*P0_H`5"1Y```"K"`\```)[!394<C__"QY````!"!Y```"^
- XMM"U(`"H@>0```K`M2``N0>X`(C`\`!8R/```TEA1R/_\1D$]00!23G4`````:
- XM``````````!!^O_^+4@`*@AY``$`O^`!(#D`_``0L*X`%&84)FX`/K?\`!``?
- XM`&((V_P````>3M5.^0#\`<Y(Y__^80``@#/\__\`W_`T(GP`!``P80``C`@`8
- XM``!G+G(',#D`Z``(1D`(```.9Q(S_````.@`2C/\(```Z`!(8`@3_`#_`.@`Z
- XM3%')_]8P.0#?\`0"0"``9R(B?``$!!AA``!""````&<*,_P```#?\=Q@"#/\N
- XM`"``W_'<80``"$S??_].=4'Z`2XB?``$```@/```"``2$!01$,(2P5'(__9.9
- XM=3/\$@``W_$`,_P```#?\0(S_````-_Q"#/\`#@`W_"2,_P`T`#?\)0S_'"!8
- XM`-_PCC/\B;``W_"0(`DSP``$``9(0#/```0``B/\``0```#?\(`P.0#?\(@SP
- XM_(&``-_PEC(\`?0P.0#?\!X(```%9_0S_``@`-_PG`@Y``8`O^`!9Q0(.0`*J
- XM`-_P%F<.4T&R?```9P)@SG``8`)P`0@Y``H`W_`69P#_]@@Y``8`O^`!9P#_/
- XMZC0\``\R.0#?\!X(`0`%9_0S_``@`-_PG%-"M'P``&8`_^0S_`&``-_PEDYU*
- XM("!";V]T365N=2!V,2XP($H@1&%V:7,@+2!T:&ES(&ES($Y/5"!A('9I<G5S;
- XM(2$A("``X````.(```&``"9O`?\``8(/_W$!_P`!@@\(?`'_``&"`&R(`?\`*
- XM`8(/______[_________________________________________________G
- XM____````````````````````````````````````````````````````````]
- XM``````````````````````````````````````````````````````.,8```O
- XM``````_@``````&````/P````.`````````````````````&SF`````````&9
- XM8```````````!F````!@``````!Q_?P````````'[&]GX```````!@8]P\?#/
- XMXX/'P`9CP\[#8^``````V,S,```````'X`QMX`?@``````>#9F!F9@&&9F`'T
- XMQF!G9N8`````_8S`P/P````````,;.`````````&`<9AYF/!AF9@!F9AYF9CV
- XMP```_`&,\/``_``````'YLQGX```````!F-GQF9@889F8`9F9F8&8&`````!M
- XMC,#```````````.,8`````````_F-@.V9\/#QF`/P\._`[?`````_-C`P/P`0
- XM``````````````````````\```````````````````````!QX>``````````!
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM````````````````````````````````````````!^```$``````!AC``>`'M
- XMX```<`?```#```'AX!C!X>'@``````````,P``#```````89P`,P`S```#`#_
- XM8``````#,S`QPS,S,``````````#,>'A\S'CXS`#,,`#<`,S,``P`S'C,<'P5
- XM`W,P8,,S,W```````````^,S,,.[,S,P`S#``_`#XS``,`,P,S##``/Q\,#!F
- XM\?/P``````````,S,S##6_,S,`'@P`.P`S,P`S`#,/,PP>`#L#&`P#`SL```\
- XM```````#,S,PTQL#,S`!X,##,`,QX`,P`V,QX,`P`S!C`,!@8S``````````X
- XM!^'AX&,9XS'8`,/PP>`'X,`!X`?!V,'CX`'AQ@/QP<'@````````````````/
- XM``````````````.`````````````````````````````````````````````#
- XM`````````````````````````````````````````````````````````````
- XM``````````````````````````````#_____________________________J
- XM____________________________________________________________3
- XM_________________P``````````````````````````````````````````S
- XM`````````````````````````````````````````````````````````````
- XM```````'X,>````````````>````````00`'`````````8S\>'@`````````-
- XM`S'C````````````,P```````&,``P````````',M,S,`````````_,QXP/P&
- XM`````````#@>=AX>/@!W'AL>``````#][##A@/P``````_`#XS,``_``````)
- XM```<,SLS,S,`?S,W,P````#\`;PP<8``_````````P/S$```````````!S`S(
- XM/S\S`&LS,S\```````&<,!V``````````_,&&S/P`````````#,S,#`P,P!CQ
- XM,S,P``````#]C##,S/P````````'AA_P```````````>'G@>'C,`8QX=G@``>
- XM`````8QX>'@`````````````````````````````````````````````````U
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM``````````````````````````````````````````````````````?@``!`G
- XM``````88P`'@!^```'`'P```P``!X>`8P>'AX``````````#,```P``````&3
- XM&<`#,`,P```P`V```````S,P,<,S,S```````````S'AX?,QX^,P`S#``W`#[
- XM,S``,`,QXS'!\`-S,#,S-P``````````/C,S##NS,S,`,PP`/P`^,P`#`#W
- XM,#,PPP`#\?#`P?'S\``````````#,S,PPUOS,S`!X,`#L`,S,`,P`S#S,,'@`
- XM`[`Q@,`P,[```````````S,S,-,;`S,P`>#`PS`#,>`#,`-C,>#`,`,P8P#`\
- XM8&,P``````````?AX>!C&>,QV`##\,'@!^#``>`'P=C!X^`!X<8#\<'!X```"
- XM```````````````````````````#@```````````````````````````````#
- XM`````````````````````````````````````````````````````````````
- XM````````````````````````````````````````````________________T
- XM_____________________________________P```^P````6`````````"P`5
- XM```V````/````%H```!@````9@```*(```"Z````V@```/0```&:```!G@``V
- XM`:X```&R```!P@```=8```)$```"4@```EX```)H```"@````HH````````#Q
- XM\`````%W8@`````!!`````%L;6(````$*`````%R;6(````$+`````%S=6T`_
- XM```"G@````%B8VAK```#$`````%E>&ET````V`````%N97AT```#/`````)E%
- XM=&5X=````````8P````";6QO;W````````)R`````G=B;7-G```````!"```:
- XM``)F<F]M=V(``````!H````"9V]?<&%L``````-B`````FUS9W1X=``````!L
- XM*@````)N8F]A<F0``````S@````"7V5X:71?,0````0N`````F-M7VQO;W``E
- XM```#A`````)D;W-N86UE`````1X````"96YD8V%P=`````RD`````F9R;VUDZ
- XM;W,`````F@````)G861T97AT`````C0````":6YS=&%L;`````(X`````FYOW
- XM7S@S-S(````#:@````)S:'5T7W5P`````S`````"<W1A<G1U<```````````R
- XM`G-W87!M96T````#=`````)W86ET=&]F`````_8````"8V]L9&-A<'0```*XR
- XM`````F-O;VQC87!T```"[@````)D;W-C<F5E;@```Y(````"97AI=%]D;W,`2
- XM``#\`````F=A9&ET97AT```!R@````)S8W)?;6]D90``"+P````"<V-R965NW
- XM7V@```2F`````G-C<F5E;E]L```$J@````-?,7=A:71T;V8```````1*````+
- XM`V)O9'ET97AT,0```````=X````#8F]D>71E>'0R```````"``````-B;V1YA
- XM=&5X=#,```````(-`````V-A<'1S=&%R=````````K@````#:6YT=6EN86UEG
- XM```````!#`````-B;V%R9%]M;V1E``````34`````V)O9'EI=&5X=#$`````$
- XM`8X````#8F]D>6ET97AT,@`````!H@````-B;V1Y:71E>'0S``````&V````,
- XM`V-O9&5T87)G970``````JP````#;W5R8V]P;&ES=``````$I`````-R96)U#
- XM:6QD7V%L;`````+H`````V-H:7!D871A7V5N9```#*0````#8V]L9&-A<'1AP
- XM9&1R```"M`````-C;V]L8V%P=&%D9'(```*P````!&-H:7!D871A7W-T87)TD
- X.``````2D`````````_)L)
- X``
- Xend
- Xsize 4244
- END_OF_FILE
- if test 5981 -ne `wc -c <'bootmenu.uu'`; then
- echo shar: \"'bootmenu.uu'\" unpacked with wrong size!
- fi
- # end of 'bootmenu.uu'
- fi
- if test -f 'bootmenu0.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'bootmenu0.uu'\"
- else
- echo shar: Extracting \"'bootmenu0.uu'\" \(532 characters\)
- sed "s/^X//" >'bootmenu0.uu' <<'END_OF_FILE'
- Xbegin 666 bootmenu.info
- XMXQ```0``````R`!@`",`$0`%``,``0`CNC``````````````````````````F
- XM`````R0`(H00`````````6X```!5``&Z>`````````^@````+@%R`)?__P``Y
- XM```"0`)_``%=!```````P!*`````````````6@`H_____P`!____Z0``````<
- XM`````",`$``"``&\.`,```````!__\````!_X<````!_X<````!_X<````!_*
- XM_\````````````````````/ZJ/````/U1'@```/JHC@```/5<1@```.J__@`4
- XM``-5__@```*K__@```/___@``````````/____^``/_____``/_____@`/__^
- XM___@`/_____@`/_____@`/_____@`/P']0_@`/P.ZH?@`/P=U4?@`/P[BJ?@1
- XD`/QW``?@`/SN``?@`,W<``?@`/P```?@``````````````$`?
- X``
- Xend
- Xsize 351
- END_OF_FILE
- if test 532 -ne `wc -c <'bootmenu0.uu'`; then
- echo shar: \"'bootmenu0.uu'\" unpacked with wrong size!
- fi
- # end of 'bootmenu0.uu'
- fi
- echo shar: End of archive 1 \(of 1\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have the archive.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
- Mail comments to the moderator at <amiga-request@uunet.uu.net>.
- Post requests for sources, and general discussion to comp.sys.amiga.misc.
-